package com.zzhua.Listener;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

/**
 * @author cmlan
 * @date 2018/1/6.


 * <p>
 * 通过监听，开辟线程，执行定时任务 当然 也可以执行其他
 */
@Component
@Slf4j
public class MyApplicationListener implements ApplicationListener<ContextRefreshedEvent> {

    // 最后发布刷新完成事件的时候，被调用，
    // SimpleApplicationEventMulticaster会拿到容器内所有ApplicationListener(观察者模式)
    // 然后挨个调用他们的onApplicationEvent监听方法，并且参数中封装了ApplicationContext

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        System.out.println("-------------bean初始化完毕-------------");
        /**
         * 通过线程开启数据库中已经开启的定时任务 灵感来自spring
         * spring boot继续执行 mythread开辟线程，延迟后执行
         */
        DataSourceJobThread myThread = (DataSourceJobThread) event.getApplicationContext().getBean("dataSourceJobThread");
        myThread.start();

    }

}
